package cn.study.park;

import lombok.SneakyThrows;

import java.util.concurrent.locks.LockSupport;

/**
 * @author 跟大佳一起学架构
 * @desc 当调用interrupt方法时，会把中断状态设置为true，然后park方法会去判断中断状态，如果为true，
 * 就直接返回，然后往下继续执行，并不会抛出异常。注意，这里并不会清除中断标志。
 **/
public class LockSupportTest {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(new ParkThread1());
        t.start();
        // 第三步演示 unpark可以先执行
        LockSupport.unpark(t);
        Thread.sleep(1000);
        System.out.println(Thread.currentThread().getName()+"3S后开始唤醒阻塞线程");
        Thread.sleep(3000);
        // 第一步先演示不解锁
        // 第二步演示解锁    可以指定线程释放锁。
//        LockSupport.unpark(t);
        System.out.println(Thread.currentThread().getName()+"结束唤醒");
    }
}

class ParkThread1 implements Runnable{
    @SneakyThrows
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"开始阻塞");
        Thread.sleep(10);
        LockSupport.park();
        System.out.println(Thread.currentThread().getName()+"结束阻塞");
    }
}